package com.fsm.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.BoundListOperations;
import org.springframework.data.redis.core.ListOperations;
import org.springframework.data.redis.core.RedisTemplate;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;

/*******************
 *@Describe
 *@author 封神梦
 *@Time 2023/6/13
 *@Company http://com.yiview.com
 ****************/
public class ListRedisService {

    @Autowired
    private RedisTemplate redisTemplate;

    public void set(String key, String value) {
        //1、通过redisTemplate设置值
        redisTemplate.boundListOps("listKey").leftPush("listLeftValue1");
        redisTemplate.boundListOps("listKey").rightPush("listRightValue2");

        //2、通过BoundValueOperations设置值
        BoundListOperations listKey = redisTemplate.boundListOps("listKey");
        listKey.leftPush("listLeftValue3");
        listKey.rightPush("listRightValue4");

        //3、通过ValueOperations设置值
        ListOperations opsList = redisTemplate.opsForList();
        opsList.leftPush("listKey", "listLeftValue5");
        opsList.rightPush("listKey", "listRightValue6");
    }

    //2.将List放入缓存
    public void pushList() {
        ArrayList<String> list = new ArrayList<>();
        redisTemplate.boundListOps("listKey").rightPushAll(list);
        redisTemplate.boundListOps("listKey").leftPushAll(list);
    }

    //3.设置过期时间(单独设置)
    public void setExpire() {
        redisTemplate.boundValueOps("listKey").expire(1, TimeUnit.MINUTES);
        redisTemplate.expire("listKey", 1, TimeUnit.MINUTES);
    }

    //4.获取List缓存全部内容（起始索引，结束索引）
    public void getAllValue() {
        List listKey1 = redisTemplate.boundListOps("listKey").range(0, 10);
    }

    //5.从左或从右弹出一个元素
    public void PopValue() {
        String listKey2 = (String) redisTemplate.boundListOps("listKey").leftPop();  //从左侧弹出一个元素
        String listKey3 = (String) redisTemplate.boundListOps("listKey").rightPop(); //从右侧弹出一个元素
    }


    //6.根据索引查询元素
    public void getValueByIndex() {
        String listKey4 = (String) redisTemplate.boundListOps("listKey").index(1);
    }

    //7.获取List缓存的长度
    public Long getSize() {
        return redisTemplate.boundListOps("listKey").size();
    }

    //8.根据索引修改List中的某条数据(key，索引，值)
    public void updateValue() {
        redisTemplate.boundListOps("listKey").set(3L, "listLeftValue3");
    }

    //9.移除N个值为value(key,移除个数，值)
    public void removeValue() {
        redisTemplate.boundListOps("listKey").remove(3L, "value");
    }
}
